//题目描述
//用高精度计算出 S=1!+2!+3!+⋯+n!（n≤50）。
//
//其中 ! 表示阶乘，定义为 n!=n×(n−1)×(n−2)×⋯×1。例如，5!=5×4×3×2×1=120。
//
//输入格式
//一个正整数 n。
//
//输出格式
//一个正整数 S，表示计算结果。
#include<iostream>
#include<vector>
using namespace std;
vector<int> add(vector<int> &A, vector<int> &B)
{
	vector<int> C;
	int t = 0;
	for(size_t i = 0; i < A.size() || i < B.size() || t; i++){
		if(i < A.size()) t += A[i];
		if(i < B.size()) t += B[i];
		C.push_back(t % 10);
		t /= 10;
	}
	return C;
}
vector<int> mul(vector<int> &A, int b)
{
	vector<int> C;
	int t = 0;
	for(size_t i = 0; i < A.size() || t; i++){
		if(i < A.size()) t += A[i] * b;
		C.push_back(t % 10);
		t /= 10;
	}
	while(C.size() > 1 && C.back() == 0) C.pop_back();
	return C;
}
int main()
{
	int n;
	cin >> n;
	vector<int> S, A;  //S存储累加和，A存储当前阶乘值
	S.push_back(0);  //初始化和S=0
	A.push_back(1);  //初始化阶乘A=1
	for(int i = 1; i <= n; i++){
		A = mul(A, i);  //计算A = i!
		S = add(S, A);  //将当前阶乘值i!累加到总和S
	}
	for(int i = S.size() - 1; i >= 0; i--)
		printf("%d", S[i]);
	return 0;
}
